home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 13
/
Aminet 13 - August 1996.iso
/
Aminet
/
dev
/
e
/
energy.lha
/
Energy
/
PD
/
Hubble.e
< prev
next >
Wrap
Text File
|
1996-05-19
|
12KB
|
460 lines
/* Hubble V1.1b - 1996 - © Marco Talamelli
E-Mail: Marco_Talamelli@amp.flashnet.it
Data:18 May 1996
A Simple lens
*/
OPT PREPROCESS
OPT OSVERSION=39
MODULE 'intuition/intuition', -> window
'intuition/imageclass',
'intuition/icclass',
'intuition/screens', -> screen
'intuition/gadgetclass',
'intuition/classes', -> object
'exec/ports', -> MessagePort
'commodities',
'libraries/commodities',
'reqtools',
'libraries/reqtools',
'gadtools','iff',
'libraries/gadtools',
'graphics/view',
'graphics/scale', -> scale image
'graphics/gfx', -> bitmap
'graphics/rastport',
'other/ecode',
'devices/inputevent' -> for inputevent
DEF innerwidth = 200,
innerheight = 100,
scalefac = 10,
cxsigflag, scrdepth,
waitmask,x,y,
ie:PTR TO inputevent,
leftoff, topoff, bottomoff,
sizeiw, sizeih, winleft=100, wintop=100,
signal=-1,visualinfo,
broker_mp=NIL:PTR TO mp,
broker=NIL,
userport:PTR TO mp,
cosignal=NIL,
mywin:PTR TO window,
hires,view,
filereq:PTR TO rtfilerequester,
filename[34]:STRING,
scr:PTR TO screen,tmpscr:PTR TO screen,
sizex, sizey,
menu:PTR TO menu,task,
item:PTR TO menuitem,
srcbm:PTR TO bitmap,
destbm:PTR TO bitmap,
scrbm:PTR TO bitmap,
jump = FALSE, mm = TRUE,
customcxobj,
propgadget:PTR TO object,
pubscreenname[MAXPUBSCREENNAME]:STRING
PROC setupscreen()
IF scr
IF NextPubScreen(scr, pubscreenname)
tmpscr := LockPubScreen(pubscreenname)
FreeVisualInfo(visualinfo)
UnlockPubScreen(NIL, scr)
scr := tmpscr
ELSE
RETURN FALSE
ENDIF
ELSE
scr:=LockPubScreen(NIL)
ENDIF
visualinfo := GetVisualInfoA(scr, NIL)
ENDPROC TRUE
PROC getoffsets()
DEF drawinfo:PTR TO drawinfo,sizeobject
hires := scr.flags
IF hires THEN (sizeiw := 18) ELSE (sizeiw := 13)
IF drawinfo := GetScreenDrawInfo(scr)
IF sizeobject := NewObjectA(NIL, 'sysiclass',
[SYSIA_WHICH, SIZEIMAGE,
SYSIA_DRAWINFO, drawinfo,
SYSIA_SIZE,(IF hires THEN SYSISIZE_HIRES ELSE SYSISIZE_MEDRES)])
GetAttr(IA_WIDTH, sizeobject, {sizeiw})
GetAttr(IA_HEIGHT, sizeobject, {sizeih})
DisposeObject(sizeobject)
ENDIF
FreeScreenDrawInfo(scr, drawinfo)
ENDIF
topoff := scr.rastport.txheight + scr.wbortop + 1
leftoff := scr.wborleft
bottomoff := scr.wborbottom
scrbm := scr.bitmap
scrdepth := scr.bitmap.depth
ENDPROC
PROC allocbm()
IF destbm THEN FreeBitMap(destbm)
IF srcbm THEN FreeBitMap(srcbm)
innerwidth := mywin.width - (leftoff + sizeiw)
innerheight := mywin.height - (topoff + bottomoff)
sizex:=(innerwidth / scalefac)
sizey:=(innerheight / scalefac)
srcbm := AllocBitMap(sizex, sizey, scrdepth, BMF_CLEAR, scrbm)
destbm := AllocBitMap(innerwidth, innerheight, scrdepth, BMF_CLEAR, srcbm)
ENDPROC TRUE
PROC openwin()
DEF resolution,bw,rh,wx,wy
wx:=30 + topoff + bottomoff
wy:=60 + leftoff + sizeiw
resolution:= IF scr.flags AND SCREENHIRES THEN SYSISIZE_HIRES ELSE SYSISIZE_LOWRES
bw:=IF resolution=SYSISIZE_LOWRES THEN 1 ELSE 2
rh:=IF resolution=SYSISIZE_HIRES THEN 2 ELSE 1
IF menu := CreateMenusA([NM_TITLE,0,'Project',0,0,0,0,
NM_ITEM,0,'Jump','J',0,0,0,
NM_ITEM,0,NM_BARLABEL,0,0,0,0,
NM_ITEM,0,'Save Screen','S',0,0,0,
NM_ITEM,0,NM_BARLABEL,0,0,0,0,
NM_ITEM,0,'Info Screen','I',0,0,0,
NM_ITEM,0,NM_BARLABEL,0,0,0,0,
NM_ITEM,0,'MouseMove','M',(IF mm THEN CHECKED ELSE 0) OR CHECKIT,0,0,
NM_ITEM,0,NM_BARLABEL,0,0,0,0,
NM_ITEM,0,'About','A',$0,0,0,
NM_ITEM,0,NM_BARLABEL,0,0,0,0,
NM_ITEM,0,'Quit','Q',0,0,0,0]:newmenu,NIL)
IF LayoutMenusA(menu, visualinfo, [GTMN_NEWLOOKMENUS, TRUE, NIL])
IF propgadget := NewObjectA(NIL, 'propgclass',
[PGA_FREEDOM, FREEVERT,
ICA_TARGET, ICTARGET_IDCMP,
PGA_NEWLOOK, TRUE,
PGA_BORDERLESS, DRIF_NEWLOOK,
PGA_TOTAL, 20,
PGA_VISIBLE, 1,
PGA_TOP, scalefac,
GA_RELVERIFY, 1,
GA_RELRIGHT, bw - sizeiw + 3,
GA_TOP, topoff + rh,
GA_WIDTH, sizeiw - bw - bw - 4,
GA_RELHEIGHT, -topoff - sizeih - rh - rh,
GA_RIGHTBORDER, TRUE,NIL])
IF mywin := OpenWindowTagList(NIL,
[WA_GADGETS, propgadget,
WA_MINWIDTH, wy,
WA_MINHEIGHT, wx,
WA_PUBSCREEN, scr,
WA_TITLE, 'Hubble v1.1b',
WA_FLAGS, WFLG_CLOSEGADGET OR
WFLG_SIZEGADGET OR
WFLG_SIZEBRIGHT OR
WFLG_DRAGBAR OR
WFLG_DEPTHGADGET OR
WFLG_SIMPLE_REFRESH OR
WFLG_ACTIVATE OR
WFLG_NEWLOOKMENUS,
WA_IDCMP, IDCMP_CLOSEWINDOW OR
IDCMP_NEWSIZE OR
IDCMP_MENUPICK OR
IDCMP_REFRESHWINDOW OR
IDCMP_IDCMPUPDATE,
WA_WIDTH,innerwidth + leftoff + sizeiw,
WA_HEIGHT,innerheight + topoff + bottomoff,
WA_LEFT, winleft,
WA_TOP, wintop,
WA_MAXWIDTH, -1,
WA_MAXHEIGHT, -1,
WA_AUTOADJUST, TRUE,NIL])
SetMenuStrip(mywin, menu)
userport := mywin.userport
ScreenToFront(scr)
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC FALSE
PROC closewin()
IF mywin
ClearMenuStrip(mywin)
CloseWindow(mywin)
ENDIF
IF menu THEN FreeMenus(menu)
IF propgadget THEN DisposeObject(propgadget)
IF srcbm THEN FreeBitMap(srcbm)
IF destbm THEN FreeBitMap(destbm)
srcbm := NIL
destbm := NIL
ENDPROC
PROC refresh()
x:= scr.mousex - (sizex / 2)
y:= scr.mousey - (sizey / 2)
IF (x < 0) THEN x := 0
IF (x > (scr.width - sizex)) THEN x := (scr.width - sizex)
IF (y < 0) THEN y := 0
IF (y > (scr.height - sizey)) THEN y := (scr.height - sizey)
BltBitMap(scrbm, x, y, srcbm, 0, 0, sizex, sizey, $80 OR $40, -1, NIL)
WaitBlit()
scale()
ENDPROC
PROC scale()
IF scalefac >1
BitMapScale([0,0,sizex,sizey,1,1,0,0,
innerwidth,innerheight,scalefac,scalefac,
srcbm,destbm,0,0,0,0,0]:bitscaleargs)
WaitBlit()
BltBitMapRastPort(destbm, 0, 0, mywin.rport, leftoff, topoff, innerwidth, innerheight, $80 OR $40)
ELSE
BltBitMapRastPort(srcbm, 0, 0, mywin.rport, leftoff, topoff, innerwidth, innerheight, $80 OR $40 )
ENDIF
WaitBlit()
ENDPROC
PROC processmsg()
DEF intuimsg:PTR TO intuimessage, im,
msg,
done = FALSE,
msgtype, msgid,sigmask, itemNum,
code
REPEAT
sigmask := Wait(Shl(1,userport.sigbit) OR Shl(1,signal) OR cxsigflag)
IF (sigmask AND cxsigflag)
WHILE (msg := GetMsg(broker_mp))
msgid := CxMsgID(msg)
msgtype := CxMsgType(msg)
ReplyMsg(msg)
SELECT msgtype
CASE CXM_COMMAND
SELECT msgid
CASE CXCMD_DISABLE
ActivateCxObj(broker, FALSE)
CASE CXCMD_ENABLE
ActivateCxObj(broker, TRUE)
CASE CXCMD_KILL
done := TRUE
ENDSELECT
ENDSELECT
ENDWHILE
ENDIF
IF sigmask AND (Shl(1, userport.sigbit))
jump := FALSE
WHILE intuimsg := GetMsg(userport)
ReplyMsg(intuimsg)
im:=intuimsg.class
SELECT im
CASE IDCMP_CLOSEWINDOW
done := TRUE
CASE IDCMP_NEWSIZE
allocbm()
refresh()
CASE IDCMP_IDCMPUPDATE
GetAttr(PGA_TOP, propgadget, {scalefac})
INC scalefac
allocbm()
refresh()
CASE IDCMP_MENUPICK
code:=intuimsg.code
WHILE (code<>MENUNULL) AND (jump=FALSE)
item:=ItemAddress(menu, code)
itemNum:=ITEMNUM(code)
SELECT itemNum
CASE 0
jumpfunc()
CASE 2
IF filereq := RtAllocRequestA(RT_FILEREQ, NIL)
filename[0] := 0
IF RtFileRequestA(filereq, filename, 'Save as...',0)
view:=(IF scalefac>1 THEN destbm ELSE srcbm)
IfFL_SaveClip(filename,view,scr.viewport.colormap.colortable,scr.flags,
0,0,mywin.width/8,mywin.height)
ELSE
RtEZRequestA('No Save screen!', '_Continue', NIL, NIL,[RT_UNDERSCORE, "_",NIL])
ENDIF
RtFreeRequest(filereq)
ELSE
RtEZRequestA('No Memory!!', 'Aargh!', NIL, NIL, NIL)
ENDIF
CASE 4
RtEZRequestA('Title : \s\n'+
'Width : \d\n'+
'Height : \d\n'+
'Flags : $\h\n'+
'BitMap : $\h\n'+
'Depth : \d\n',
'_Continue',
NIL,
[scr.title,
scr.width,
scr.height,
scr.flags,
scr.bitmap,
scr.bitmap.depth],
[RT_UNDERSCORE, "_",NIL])
CASE 6
IF ((mm = FALSE) AND item.flags)
mm := TRUE
ELSEIF ((mm=TRUE) AND item.flags)
mm := FALSE
ENDIF
ActivateCxObj(broker, mm)
CASE 8
RtEZRequestA( 'Hubble V1.1b ( 18 May 1996)\n\n'+
'written by:\n Marco Talamelli\n'+
' Via Massa di San Giuliano 440\n'+
' Roma\n 00010\n ITALIA\n\n'+
'EMail:\n Marco_Talamelli@amp.flashnet.it\n\n'+
'This program is CardWare!\n'+
'if you like it, send me a postcard of your city!\n'+
'see you soon!','_Continue',NIL,NIL,[RT_UNDERSCORE, "_",NIL])
scale()
CASE 10
RETURN
CASE 7
jump:=TRUE
ENDSELECT
code := (item.nextselect) AND ($FFFF)
ENDWHILE
ENDSELECT
ENDWHILE
ENDIF
IF sigmask AND ((ie.class = IECLASS_RAWMOUSE) AND mm) THEN refresh()
UNTIL done
ENDPROC
PROC set()
waitmask := waitmask AND (Shl(1,userport.sigbit)+1)
wintop := mywin.topedge
winleft := mywin.leftedge
getoffsets()
ENDPROC
PROC jumpfunc()
DEF returnvalue
IF returnvalue := setupscreen()
closewin()
set()
WHILE openwin()=FALSE
RtEZRequestA('Unable to open \a\s\a Screen!','_Continue',NIL,[pubscreenname],[RT_UNDERSCORE, "_",NIL])
setupscreen()
set()
ENDWHILE
waitmask := waitmask OR Shl(1,userport.sigbit)
allocbm()
refresh()
jump := TRUE
IF (returnvalue = 1) THEN RETURN TRUE
ENDIF
ENDPROC FALSE
PROC cxfunction(cxm,co)
ie := CxMsgData(cxm)
IF ((ie.class = IECLASS_RAWMOUSE) AND mm) THEN DivertCxMsg(cxm, co, co)
ENDPROC
PROC initbroker()
DEF cxfunc
IF broker_mp := CreateMsgPort()
cxsigflag := Shl(1, broker_mp.sigbit)
signal:=AllocSignal(-1)
cxsigflag:=Shl(1, signal)
task:=FindTask(NIL)
cosignal:=CxSignal(task, signal)
IF broker:=CxBroker(
[NB_VERSION, 0, 'Hubble',
'Hubble V1.1b', 'First E Lens!',
NBU_UNIQUE OR NBU_NOTIFY, 0,
0,
0, broker_mp, 0]:newbroker, NIL)
cxfunc := eCodeCxCustom({cxfunction})
customcxobj:=CxCustom(cxfunc, 0)
AttachCxObj(broker, customcxobj)
AttachCxObj(customcxobj, cosignal)
ActivateCxObj(broker, TRUE)
ENDIF
ENDIF
ENDPROC
VOID '$VER: Hubble 1.1b (18.05.96) by Marco Talamelli'
PROC main()
IF reqtoolsbase:=OpenLibrary('reqtools.library',37)
IF iffbase :=OpenLibrary ('iff.library',21)
IF cxbase := OpenLibrary ('commodities.library', 37)
IF gadtoolsbase := OpenLibrary ('gadtools.library', 37)
IF setupscreen()
getoffsets()
wintop := topoff
IF (scr.height > 300) THEN innerheight:= Shl(innerheight,1)
IF openwin()
allocbm()
refresh()
initbroker()
processmsg()
IF broker THEN DeleteCxObjAll(broker)
IF signal THEN FreeSignal(signal)
IF visualinfo THEN FreeVisualInfo(visualinfo)
IF scr THEN UnlockPubScreen(NIL, scr)
closewin()
ENDIF
ENDIF
CloseLibrary(gadtoolsbase)
ENDIF
CloseLibrary(cxbase)
ENDIF
CloseLibrary(iffbase)
ENDIF
CloseLibrary(reqtoolsbase)
ENDIF
ENDPROC